package controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import pojo.User;
import service.UserService;
import util.Page;

import java.util.List;

@Controller
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    // 用户登录
    @RequestMapping("/login")
    public String login(User user) {
        // 调用服务层的登录方法
        boolean flag = userService.login(user);
        if (flag) {
            // 登录成功，跳转到主页
            return "index";
        } else {
            // 登录失败，返回登录页面
            return "login";
        }
    }

    // 跳转到注册页面
    @RequestMapping("/toregist")
    public String toRegist() {
        return "regist";
    }

    // 用户注册
    @PostMapping("/register")
    public String registerUser(@RequestParam("name") String name, @RequestParam("pass") String pass) {
        // 创建新用户对象
        User user = new User();
        user.setName(name);
        user.setPass(pass);

        // 调用服务层方法保存用户信息
        int result = userService.addUser(user);
        if (result > 0) {
            // 注册成功，跳转到登录页面
            return "login";
        } else {
            // 注册失败，返回注册页面
            return "regist";
        }
    }

    // 检查用户名唯一性
    @RequestMapping("/checkUserNameUnique")
    @ResponseBody
    public String checkUserNameUnique(@RequestParam("name") String name) {
        // 调用服务层方法查询用户名是否存在
        int count = userService.findUserByName(name);
        if (count > 0) {
            // 用户名已存在
            return "false";
        } else {
            // 用户名可用
            return "true";
        }
    }

    // 全查询
    @RequestMapping("/list/{currentPage}")
    public String list(User user, @PathVariable("currentPage") Integer currentPage, Model model) {
        // 创建分页对象
        Page page = new Page();

        // 获取总记录数
        int totalCount = userService.count(user);
        page.setTotalCount(totalCount);

        // 设置当前页
        page.setCurrentPage(currentPage);

        // 计算总页数
        page.setTotalPage();

        // 计算偏移量
        int offset = (currentPage - 1) * page.getPageSize();

        // 查询用户列表
        List<User> users = userService.findAll(user, offset, page.getPageSize());

        // 将数据添加到模型中
        model.addAttribute("users", users);
        model.addAttribute("page", page);
        model.addAttribute("user", user);

        // 返回视图名称
        return "user/list";
    }

    // 跳转到添加用户的页面
    @RequestMapping("/toadd")
    public String toAdd() {
        return "user/add";
    }

    // 保存新用户
    @RequestMapping("/addSave")
    public String addSave(User user) {
        // 调用服务层方法添加用户
        int result = userService.addUser(user);
        if (result > 0) {
            // 添加成功，重定向到用户列表第一页
            return "redirect:/user/list/1";
        } else {
            // 添加失败，返回添加页面
            return "user/add";
        }
    }

    // 删除用户
    @RequestMapping("/delete/{id}")
    public String deleteById(@PathVariable("id") int id) {
        // 调用服务层方法删除用户
        int result = userService.deleteUserById(id);
        if (result > 0) {
            // 删除成功，重定向到用户列表第一页
            return "redirect:/user/list/1";
        } else {
            // 删除失败，返回错误页面
            return "error";
        }
    }

    // 跳转到更新用户的页面
    @RequestMapping("/toupdate/{id}")
    public String toUpdate(@PathVariable("id") int id, Model model) {
        // 查询用户信息
        User user = userService.findById(id);

        // 将用户信息添加到模型中
        model.addAttribute("user", user);

        // 返回更新页面
        return "user/update";
    }

    // 保存更新的用户信息
    @RequestMapping("/updateSave")
    public String updateSave(User user) {
        // 调用服务层方法更新用户
        int result = userService.updateUser(user);
        if (result > 0) {
            // 更新成功，重定向到用户列表第一页
            return "redirect:/user/list/1";
        } else {
            // 更新失败，返回更新页面
            return "user/update";
        }
    }
}
